package part9;

import java.util.Arrays;

/**
 * @author wcj
 * @Date 2021/5/17 16:58
 * @Version 1.0
 */
public class Part93 {

    private static String s = "Hello World!";

    public static void main(String[] args) {
        process(new UpperCase(), s);
        process(new LowerCase(), s);
        process(new Split(), s);
    }

    public static void process(Processor p, Object s) {
        System.out.println("Processor:" + p.name());
        System.out.println(p.process(s));
    }
}

/**
 * 策略设计模式：更具所传递的参数对象的不同执行不同的行为，关于后面一小部分的设计模式的部分
 * 在之后看设计模式的时候再对每个设计模式进行解析
 */
class Processor {
    public String name() {
        return this.getClass().getSimpleName();
    }

    public Object process(Object input) {
        return input;
    }
}

class UpperCase extends Processor {
    @Override
    public String process(Object input) {
        return ((String) input).toUpperCase();
    }
}

class LowerCase extends Processor {
    @Override
    public String process(Object input) {
        return ((String) input).toLowerCase();
    }
}

class Split extends Processor {
    @Override
    public String process(Object input) {
        return Arrays.toString(((String) input).split(" "));
    }
}